#include "scene.h"

//--------------------- Constructeurs et destructeur -------------------
/* ****************************************************************
 * Constructeur par défault
 * **************************************************************** */
Scene::Scene()
{
    _gestionnaireLumieres = &GestionnaireLumieres::getInstance();
}

/* ****************************************************************
 * Constructeur d'une scène qui prend une liste d'objets
 * @param objets : les objets à recopier dans la scene
 * **************************************************************** */
Scene::Scene(QList<ObjetScene*> objets)
    : _objets(objets)
{
    _gestionnaireLumieres = &GestionnaireLumieres::getInstance();
}

/* ****************************************************************
 * Constructeur par recopie
 * @param scene : scene à recopier
 * **************************************************************** */
Scene::Scene(const Scene& scene)
{
    //On recopie les objets
    for(int i = 0; i < scene._objets.size(); ++i)
    {
        this->_objets.push_back(new ObjetScene(*scene._objets[i]));
    }

    _gestionnaireLumieres = &GestionnaireLumieres::getInstance();
}


/* ****************************************************************
 * Destructeur
 * **************************************************************** */
Scene::~Scene()
{
    //on détruit chaque objet de la scène.
    for(int i = 0; i < _objets.size(); ++i)
    {
        delete _objets[i];
    }

    delete _gestionnaireLumieres;
}

//----------------------------------------------------------------------
//--------------------- Méthodes ---------------------------------------

/* ****************************************************************
 * Fonction de dessin
 * **************************************************************** */
void Scene::dessiner()
{
    for(int i = 0; i < _objets.size(); ++i)
    {
        _objets[i]->dessiner();
    }
}

/* ****************************************************************
 * Fonction d'ajout d'un objet à la scène
 * @param os : objet à rajouter à la scène
 * **************************************************************** */
void Scene::ajouterObjetScene(ObjetScene& os)
{
    ObjetScene * objet = & os;
    _objets.push_back(objet);
}

//----------------------------------------------------------------------
//--------------------- Accesseurs -------------------------------------

/* ****************************************************************
 * Accesseur sur le gestionnaireLumieres
 * @return GestionnaireLumieres& : le gestionnaire de lumières de la scène
 * **************************************************************** */
GestionnaireLumieres& Scene::getGestionnaireLumieres()
{
    return *_gestionnaireLumieres;

}

//----------------------------------------------------------------------
//--------------------- Surcharge des opérateurs -----------------------

//----------------------------------------------------------------------


